package com.atguigu.gmall.product.service.impl;

import com.atguigu.gmall.model.product.BaseAttrValue;
import com.atguigu.gmall.product.mapper.BaseAttrValueMapper;
import com.atguigu.gmall.product.service.BaseAttrValueService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.util.List;

/**
 * 平台属性值接口实现类
 */
@Service
public class BaseAttrValueServiceImpl implements BaseAttrValueService {
    @Resource
    BaseAttrValueMapper baseAttrValueMapper;
    /**
     * 查询全部
     *
     * @return
     */
    @Override
    public List<BaseAttrValue> findAll() {
        return baseAttrValueMapper.selectList(null);
    }

    /**
     * 主键查询
     *
     * @param id
     * @return
     */
    @Override
    public BaseAttrValue getBaseAttrValue(Long id) {
        return baseAttrValueMapper.selectById(id);
    }
    /**
     * 添加
     *
     * @param baseAttrValue
     */
    @Override
    public void add(BaseAttrValue baseAttrValue) {
        if (baseAttrValue ==null||baseAttrValue.getValueName() ==null){
            throw new RuntimeException("参数错误");
        }
        int insert = baseAttrValueMapper.insert(baseAttrValue);
        if (insert <= 0){
            throw new RuntimeException("新增失败");
        }
    }

    /**
     * 修改
     *
     * @param baseAttrValue
     */
    @Override
    public void update(BaseAttrValue baseAttrValue) {
        if (baseAttrValue ==null){
            throw new RuntimeException("参数错误");
        }
        int update = baseAttrValueMapper.updateById(baseAttrValue);
        if (update < 0){
            throw new RuntimeException("修改失败");
        }
    }

    /**
     * 删除
     *
     * @param id
     */
    @Override
    public void delete(Long id) {
        if (id == null){
            return;
        }
        int delete = baseAttrValueMapper.deleteById(id);
        if (delete <= 0){
            throw new RuntimeException("删除失败");
        }
    }

    /**
     * 分页查询
     *
     * @param page
     * @param size
     * @return
     */
    @Override
    public IPage findPage(Integer page, Integer size) {
        return baseAttrValueMapper.selectPage(new Page<BaseAttrValue>(page,size),null);
    }

    /**
     * 条件查询
     *
     * @param baseAttrValue
     * @return
     */
    @Override
    public List<BaseAttrValue> search(BaseAttrValue baseAttrValue) {
        //构造查询条件
        LambdaQueryWrapper<BaseAttrValue> wrapper = BuildWrapper(baseAttrValue);
        return baseAttrValueMapper.selectList(wrapper);
    }

    /**
     * 分页条件查询
     *
     * @param page
     * @param size
     * @param baseAttrValue
     * @return
     */
    @Override
    public IPage search(Integer page, Integer size, BaseAttrValue baseAttrValue) {
        //构造查询条件
        LambdaQueryWrapper<BaseAttrValue> wrapper = BuildWrapper(baseAttrValue);
        return baseAttrValueMapper.selectPage(new Page<BaseAttrValue>(page,size),wrapper);
    }

    /**
     * 构造查询条件
     * @param baseAttrValue
     * @return
     */
    private LambdaQueryWrapper<BaseAttrValue> BuildWrapper(BaseAttrValue baseAttrValue){
        LambdaQueryWrapper<BaseAttrValue> wrapper = new LambdaQueryWrapper<>();
        //Id不为空时作为查询条件
        if (baseAttrValue.getId() !=null){
            wrapper.eq(BaseAttrValue::getId,baseAttrValue.getId());
        }
        //属性值名称不为空时作为查询条件
        if (!StringUtils.isEmpty(baseAttrValue.getValueName())){
            wrapper.eq(BaseAttrValue::getValueName,baseAttrValue.getValueName());
        }
        //属性id不为空时作为查询条件
        if (baseAttrValue.getAttrId() !=null){
            wrapper.eq(BaseAttrValue::getAttrId,baseAttrValue.getAttrId());
        }
        return wrapper;
    }
}
